package com.sky.service.user;

import com.sky.dto.OrdersCancelDTO;
import com.sky.dto.OrdersPageQueryDTO;
import com.sky.dto.OrdersRejectionDTO;
import com.sky.dto.OrdersSubmitDTO;
import com.sky.result.PageResult;
import com.sky.vo.OrderStatisticsVO;
import com.sky.vo.OrderSubmitVO;
import com.sky.vo.OrderVO;

public interface OrderService {
    String getEstimatedDeliveryTime(Integer shopId, String customerAddress);

    OrderSubmitVO submit(OrdersSubmitDTO submitDTO);




    /**
     * 来单提醒
     * @param number
     */
    void paySuccess(String number);


    /**
     * 订单催单提醒
     * @param id
     */
    void orderReminder(Long id);

    /**
     * 历史订单分页查询
     * @param dto
     * @return
     */
    PageResult pageQueryHistoryOrders(OrdersPageQueryDTO dto);

    /**
     * 可退单订单查询
     * @param dto
     * @return
     */
    PageResult pageQueryRefundOrders(OrdersPageQueryDTO dto);

    /**
     * 查询订单详情
     * @param orderId
     * @return
     */
    OrderVO selectOrderDetail(Long orderId);

    /**
     * 取消订单
     * @param id
     */
    void cancelOrder(Long id);

    /**
     * 再来一单
     * 将原订单的商品重新加入到购物车中
     * @param id
     */
    void repetition(Long id);

    /**
     * 分页条件条件查询订单信息
     * @param dto
     * @return
     */
    PageResult conditionSearch(OrdersPageQueryDTO dto);

    /**
     * 各个状态的订单数量统计
     * @return
     */
    OrderStatisticsVO statistics();

    /**
     * 商家端取消订单
     * @param ordersCancelDTO
     */
    void adminCancelOrder(OrdersCancelDTO ordersCancelDTO);


    /**
     * 商家拒单
     * @param dto
     */
    void rejectionOrder(OrdersRejectionDTO dto);
}
